package com.regan.erp.util;

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.jfinal.kit.Prop;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.redis.Cache;
import com.jfinal.plugin.redis.Redis;
import com.jfinal.plugin.redis.RedisPlugin;
import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Set;

/**
 * redis 工具类
 *
 * @author zhangby
 * @date 2017/12/1 下午4:36
 */
public class RedisUtil {
    //redis 缓存
    private static Cache cache = Redis.use("redis");

    private RedisUtil() {
    }

    /**
     * 初始化
     *
     * @return
     */
    public static Cache cache() {
        //获取redis 并加载redis。
        if (ObjectUtil.isNull(cache)) {
            //手动加载 redis
            Prop prop = ConfigUtil.dbConfig();
            RedisPlugin commonRedis = new RedisPlugin("redis", prop.get("redis_host"), 6000, Integer.parseInt(prop.get("redis_port")), prop.get("redis_pass"), 1);
            commonRedis.start();
            cache = Redis.use("redis");
        }
        return cache;
    }

    /**
     * 设置jedis
     *
     * @param k
     * @param v
     */
    public static void set(String k, Object v) {
        Jedis jedis = cache().getJedis();
        jedis.set(k, JSON.toJSONString(v));
        cache.close(jedis);
    }

    /**
     * 设置jedis
     *
     * @param k      键
     * @param v      值
     * @param second 超时时间 单位秒
     */
    public static void set(String k, Object v, Integer second) {
        Jedis jedis = cache().getJedis();
        jedis.setex(k, second, JSON.toJSONString(v));
        cache.close(jedis);
    }

    /**
     * 设置jedis
     *
     * @param k
     * @param v
     */
    public static void setStr(String k, String v) {
        Jedis jedis = cache().getJedis();
        jedis.set(k, v);
        cache.close(jedis);
    }
    /**
     * 设置jedis
     *
     * @param k      键
     * @param v      值
     * @param second 超时时间 单位秒
     */
    public static void setStr(String k, String v, Integer second) {
        Jedis jedis = cache().getJedis();
        jedis.setex(k, second, v);
        cache.close(jedis);
    }

    /**
     * 从jedis 获取value
     *
     * @param k
     * @return
     */
    public static String get(String k) {
        Jedis jedis = cache().getJedis();
        String str = jedis.get(k);
        cache.close(jedis);
        return str;
    }


    /**
     * 从jedis 获取value
     */
    public static <T> T get(String k, Class<T> t) {
        Jedis jedis = cache().getJedis();
        String v = jedis.get(k);
        cache.close(jedis);
        if (StrKit.isBlank(v)) {
            return null;
        }
        return JSON.parseObject(v, t);
    }

    /**
     * 从jedis 获取value
     */
    public static <T> List<T> getArray(String k, Class<T> t) {
        Jedis jedis = cache().getJedis();
        String v = jedis.get(k);
        cache.close(jedis);
        if (StrKit.isBlank(v)) {
            return null;
        }
        return JSON.parseArray(v, t);
    }

    /**
     * 从jedis中 删除k
     *
     * @param key
     */
    public static void del(String key) {
        Jedis jedis = cache().getJedis();
        jedis.del(key);
        cache.close(jedis);
    }

    public static Set<String> keys(String partten) {
        Jedis jedis = cache().getJedis();
        String pattern1 = partten;
        Set<String> keys = jedis.keys(pattern1);
        cache.close(jedis);
        return keys;
    }
}
